package com.agent.config;

import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.pinecone.PineconeEmbeddingStore;
import dev.langchain4j.store.embedding.pinecone.PineconeServerlessIndexConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 第三方嵌入存储配置类，使用云端的Pinecone向量数据库
 */

@Configuration
public class EmbeddingStoreConfig {

    // 嵌入模型
    @Autowired
    private EmbeddingModel embeddingModel;

    // 配置EmbeddingStore的向量数据库，即指定第三方的Pinecone云端向量数据库
    @Bean
    public EmbeddingStore<TextSegment> embeddingStore() {
        EmbeddingStore<TextSegment> embeddingStore = PineconeEmbeddingStore.builder()// 创建基于Pinecone向量数据库的EmbeddingStore对象，用于存储嵌入向量
                .apiKey("pcsk_4pmsbP_4tyTFzDVuQSHPJLH8odGhTkTPuLFGHG7uugupTxaEtHFa2ECKNQFimUXdFeKrqx")// apikey
                .index("persionagent-index")// 索引名称，若不存在则自动创建（相当于数据库）
                .nameSpace("persionagent-namespace")// 命名空间，若不存在则自动创建(相当于表)
                .createIndex(// 创建索引配置，指定索引创建在哪个云服务上
                        PineconeServerlessIndexConfig.builder()
                                .cloud("AWS")// 指定索引部署在AWS云服务上
                                .region("us-east-1")// 指定索引所在AWS区域为us-east-1区域
                                .dimension(embeddingModel.dimension())// 设置嵌入向量维度，即嵌入向量长度，与嵌入模型输出向量维度一致
                                .build()
                )
                .build();
        return embeddingStore;
    }

}